第2章 オブジェクト指向の基準
基準
オブジェクトらしさを評価する基準とは何か。
著者が重要だと考える全ての性質。
カテゴリ
方法論と言語
ソフトウェアを分析し生産するときの施工過程やその際に使用される表記法。
実装と環境
オブジェクト指向的概念の適用を可能にするツールの基本的な性質。
ライブラリ
基本ライブラリの入手しやすさとライブラリの利用と、新しいライブラリの作成に必要なメカニズム。
方法論と言語
継ぎ目のない連続性
支援する方法論も含めて、オブジェクト指向言語および環境は、ライフサイクル全体に適用され、作業段階の間の隔たりを最小限にする物でなければならない。
オブジェクト指向的解決方法を検討する時に、特に言語は方法論と言語が分析だけでなく、実装と保守の思考に適用できるかをチェックするべきである。
クラス
方法論と言語には、中心的な概念としてクラスの概念が必須である。
クラスは抽象データ型のインスタンスで、抽象データ型はオブジェクトの集合である。
表明
言語は、クラスと特性に対して表明(事前条件、事後条件、不変表明)を与えることができなければならない。また、ツールを使って表明からドキュメントを生成でき、選択的に実行時に表明を監視できなければならない。
表明の役割は1に信頼性の高いソフトウェアの生産を助けること。2に系統的なドキュメントを提供する。3にオブジェクト指向的ソフトウェアのテストとデバッグのための中心的なツールとなる。
モジュールとしてのクラス
クラスが唯一のモジュールでなければならない。
クラスはオブジェクトの型だけでなくモジュール単位も表す。
型としてのクラス
すべての型はクラスに基づいていなければならない。
プリミティブな型でさえもクラスから派生する。
特性に基づく計算
特性呼び出しが第1の計算メカニズムでなければならない。
情報隠蔽
特性をすべての顧客から利用できるようにするか、どの顧客からも利用できないようにするか、あるいは、特定の顧客だけが利用できるようにするかはクラスを作成する人が指定できなければならない。
例外処理
言語は予期されていない異常な状況から回復するためのメカニズムを提供しなければならない。
静的型付け
良く定義された型システムならば、いくつかの型安全や互換性規則を強制することによって、受け入れたシステムの実行時の型の安全性を保証しなければならない。
総称性
仮総称パラメータを伴うクラスを書いて任意の型を表すことができなければならない。
単一継承
ほかのクラスを継承するクラスを定義できなければならない。
多重継承
クラスは任意の数のクラスから継承できなければならない。その場合、名前の衝突を意味的、文法的に解決する適切な仕組みが必要である。
反復継承
反復継承の場合の特性がどうなるかは、厳密な規則によって管理されなければならない。反復して継承された個々の特性に対し、個別に共有か複製かを選択できなければならない。
制約付き総称性
総称メカニズムは制約のある総称性をサポートしなければならない。
再定義
継承された特性の仕様、シグネチャ、および実装は再定義可能でなければならない。
多相性
継承を基本とする型システムの管理下で、エンティティ(ソフトウェアテキスト上で実行時オブジェクトを表す名前)は、許される範囲のさまざまな型の実行時オブジェクトと結びつくことができなければならない。
動的束縛
エンティティに対して特性を呼び出したとき、付加されている実行時オブジェクトの型に対応する特性を常に起動しなければならない。実行時オブジェクトの型は呼び出しを実行するたびに同じとは限らない。
実行時の型検査
オブジェクトの型が静的に与えられた型と適合するかどうかを実行時に判定できるようにすべきである。
暫定特性と暫定クラス
暫定の、すなわち、仕様は記述されているが完全には実装されていないクラスまたは特性を記述できなければならない。
メモリ管理とガーベジコレクション
言語は安全な自動メモリ管理を可能にしなければならない。そして、言語の実装はガーベジコレクションを担当する自動メモリ管理機構を提供しなければならない。
実装と環境
自動的な更新
変更後のシステム更新は自動的に行われなければならない。クラス間の依存関係の分析はツールによって実行されるべきで、開発者が手作業で行うものではない。
迅速な更新
更新されたバージョンの実行を可能にするためには、システムに対する変更の処理にかかる時期は、システムの全体のサイズにかかわらず、変更された部分のサイズの関数でなければならない。
永続性
オブジェクトとそのオブジェクトに依存するオブジェクトすべてを外部装置に保存し、同じあるいはほかのセッションで取り出すためには、永続性クロージャをサポートする永続記憶メカニズムがなければならない。
ドキュメント
クラスおよびシステムに関するドキュメントを自動的に生成するためのツールがなければならない。
ブラウジング
インタラクティブなブラウジングツールは、クラスおよび特性の間の依存関係を迅速かつ勘弁な方法で検出することを助けなければならない。
ライブラリ
基本ライブラリ
最も頻繁に必要とされるデータ構造とアルゴリズムについては、再利用可能なクラスが用意されてなければならない。
グラフィックとユーザインターフェース
気持ちの良いグラフィックユーザインターフェースをユーザに提供するアプリケーションを開発するためには再利用なクラスが利用できなければならない。
ライブラリの進化と管理
顧客ソフトウェアの混乱を最小限に抑えながらライブラリの進化を可能にするメカニズムを備えていなければならない。
ライブラリのインデックスメカニズム
ライブラリクラスには属性による検索を可能にするためのインデックス情報を付加できなければならない。